package com.xwli.springcloud.config;

import com.xwli.myrule.RibbonConsumRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
//在微服务启动的时候就能去加载我们自定义的负载均衡类
@RibbonClients(defaultConfiguration  = RibbonConsumRule.class)
public class ConsumerConfig { //@Configuration 等同于以前 spring的配置 applicationContext.xml

    /**
     * 配置负载均衡实现获取RestTemplate
     * IRule
     * 实现类：
     *   AvailabilityFilteringRule：会先过滤掉，跳闸，访问故障的服务，对剩下的服务进行轮询
     *   RetryRule：会先按照轮询获取服务，如果服务获取失败，则会在指定的时间内进行重试
     *   RoundRobinRule：轮询
     *   RandomRule：随机
     * 获取RestTemplate，交给spring管理
     * RestTemplate里面有许多RestFul接口的调用方法
     * @return
     */
    @Bean
    @LoadBalanced //Ribbon配置负载均衡实现的RestTemplate客户端
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}
